package com.cn.wx.tread;

public class Test {
    public static void main(String[] args) {
        /*
         * 线程
         * 1.线程的应用场景
         *  单线程   多线程.
         * 进程（一个应用程序）  线程（一个进程可以多个线程）
         * 吃饭  打游戏，网页
         * 2.线程的应用
         *  两种方式面试的时候，（实现线程的两种方式）
         *  1.继承tread；
         *      线程的运行状态不是有编码顺序决定的。
         *   线程的状态
         *   new        start      （cpu自动分配）run           wait        exception/over
         *  创建线程    线程就绪        线程执行                  线程等待      线程异常/线程消亡
         *      线程的执行顺序是由cpu自动分配的
         *  2.实现runnable
         *
         * 生产者和消费者模型
         *
         * 1，生成口罩
         *  生产者  消费者  仓库
         *
         *  区别           sleep                         wait
         *  类        线程里面Thread类                 Object类
         *  调用方法     静态类  类名.方法名             对象.方法
         *  谁休眠/等待     当前位置休眠                 谁调用，谁等待
         *  唤醒           必须要有参数毫秒）           有参数就自动唤醒
         *              过来参数设定的时间自然唤醒      没有参数，需要主动唤醒 this.notify();唤醒当前this.notifyAll(); 唤醒所有
         *  锁            不需要释放                       等待时间完成就释放，或者唤醒后就释放锁
         *
         *
         * 3.join  加入
         *  让线程加入到另一个线程
         *  对join进行应用，分为有参数和无参数的情况下
         *  对参数值和另一个线程等待的时间进行对比，
         * 第一个线程的时间如果小于第二个线程休眠的时间，那么第一个线程就不需要等待
         * 如果有一个更大权限的线程去保护第二个线程，那么第一个线程就必须等待第二个线程完成后才能执行
         *
         *  4.Java定时器
         *
         */
//        TreadOne treadOne = new TreadOne();
//        treadOne.start();
//        TreadTwo treadTwo = new TreadTwo();
//        treadTwo.start();
//        TreadThree treadThree = new TreadThree();
//        treadThree.start();
//        TreadFour treadFour=new TreadFour();
//        Thread thread=new Thread(treadFour);
//        thread.start();


    }
}
